/**
 * 全局用户信息管理工具
 * 提供统一的用户信息获取接口，避免重复请求
 */

import { userStorage } from './storage'
import { userApi } from './api'

/**
 * 获取用户信息（优先从本地缓存获取，如果没有则请求接口）
 * @param {boolean} forceRefresh 是否强制刷新用户信息
 * @returns {Promise<Object>} 用户信息对象
 */
export const getUserInfo = async (forceRefresh = false) => {
  try {
    // 如果不强制刷新，先尝试从本地获取
    if (!forceRefresh) {
      const cachedUserInfo = userStorage.getUserInfo()
      if (cachedUserInfo && Object.keys(cachedUserInfo).length > 0) {
        console.log('📱 从本地缓存获取用户信息:', cachedUserInfo)
        return cachedUserInfo
      }
    }
    
    // 检查是否已登录
    if (!userStorage.isLoggedIn()) {
      throw new Error('用户未登录')
    }
    
    // 从接口获取用户信息
    console.log('🌐 从接口获取用户信息...')
    const response = await userApi.getUserInfo()
    
    if (response && response.data) {
      // 保存到本地缓存
      userStorage.setUserInfo(response.data)
      console.log('✅ 用户信息获取成功并已缓存:', response.data)
      return response.data
    } else {
      throw new Error('获取用户信息失败：接口返回数据异常')
    }
    
  } catch (error) {
    console.error('❌ 获取用户信息失败:', error)
    throw error
  }
}

/**
 * 刷新用户信息（强制从接口获取最新数据）
 * @returns {Promise<Object>} 用户信息对象
 */
export const refreshUserInfo = async () => {
  return await getUserInfo(true)
}

/**
 * 获取用户特定字段信息
 * @param {string} field 字段名
 * @param {any} defaultValue 默认值
 * @returns {Promise<any>} 字段值
 */
export const getUserField = async (field, defaultValue = null) => {
  try {
    const userInfo = await getUserInfo()
    return userInfo[field] || defaultValue
  } catch (error) {
    console.error(`获取用户字段 ${field} 失败:`, error)
    return defaultValue
  }
}

/**
 * 检查用户是否有特定权限或状态
 * @param {string} permission 权限名或状态名
 * @returns {Promise<boolean>} 是否具有权限
 */
export const checkUserPermission = async (permission) => {
  try {
    const userInfo = await getUserInfo()
    // 根据实际业务逻辑调整权限检查方式
    return userInfo[permission] === true || userInfo[permission] === 1
  } catch (error) {
    console.error(`检查用户权限 ${permission} 失败:`, error)
    return false
  }
}

/**
 * 清除用户信息缓存
 */
export const clearUserInfoCache = () => {
  userStorage.removeUserInfo()
  console.log('🗑️ 用户信息缓存已清除')
}

/**
 * 在页面中使用的混入对象，提供用户信息相关方法
 */
export const userInfoMixin = {
  methods: {
    // 获取用户信息
    async $getUserInfo(forceRefresh = false) {
      return await getUserInfo(forceRefresh)
    },
    
    // 获取用户特定字段
    async $getUserField(field, defaultValue = null) {
      return await getUserField(field, defaultValue)
    },
    
    // 检查用户权限
    async $checkUserPermission(permission) {
      return await checkUserPermission(permission)
    },
    
    // 刷新用户信息
    async $refreshUserInfo() {
      return await refreshUserInfo()
    }
  }
}

export default {
  getUserInfo,
  refreshUserInfo,
  getUserField,
  checkUserPermission,
  clearUserInfoCache,
  userInfoMixin
}